//给你一个正整数 n ，生成一个包含 1 到 n² 所有元素，且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 
//
// 
//
// 示例 1： 
// 
// 
//输入：n = 3
//输出：[[1,2,3],[8,9,4],[7,6,5]]
// 
//
// 示例 2： 
//
// 
//输入：n = 1
//输出：[[1]]
// 
//
// 
//
// 提示： 
//
// 
// 1 <= n <= 20 
// 
//
// Related Topics 数组 矩阵 模拟 👍 1382 👎 0


package LeetCode.editor.cn;


/**
 * @author ldltd
 * @date 2025-02-07 09:56:42
 * @description 59.螺旋矩阵 II
 
 */
 
public class SpiralMatrixIi {
    public static void main(String[] args) {
    //测试代码
    SpiralMatrixIi fun = new SpiralMatrixIi();
    Solution solution= fun.new Solution();
    solution.generateMatrix(3);
    }

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int[][] generateMatrix(int n) {
        int[][] res = new int[n][n];
        int i = 0, j = 0;
        int top = 0, bottom = n - 1, left = 0, right = n - 1, ind = 0;

        while (ind < n * n) {
            // 从左到右
            for (j = left; j <= right && ind < n * n; j++) {
                res[top][j] = ++ind;
            }
            top++; // 上边界收缩
            j--; // 调整 j 防止越界

            // 从上到下
            for (i = top; i <= bottom && ind < n * n; i++) {
                res[i][right] = ++ind;
            }
            right--; // 右边界收缩
            i--; // 调整 i 防止越界

            // 从右到左
            for (j = right; j >= left && ind < n * n; j--) {
                res[bottom][j] = ++ind;
            }
            bottom--; // 下边界收缩
            j++; // 调整 j 防止越界

            // 从下到上
            for (i = bottom; i >= top && ind < n * n; i--) {
                res[i][left] = ++ind;
            }
            left++; // 左边界收缩
            i++; // 调整 i 防止越界
        }

        return res;
    }

}
//leetcode submit region end(Prohibit modification and deletion)

}
